﻿using SosData;
using SosForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UOCmaker
{
    public partial class FormExploradorPlantilla : FormBase
    {
        #region " Constructor "
        /// <summary>
        /// Constructor
        /// </summary>
        public FormExploradorPlantilla()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Load 
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void FormExploradorPlantilla_Load(object sender, EventArgs e)
        {
            Actualizar();
        }
        #endregion

        #region " Controles "

        /// <summary>
        /// Actualizar arbol de plantillas
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butActualizar_Click(object sender, EventArgs e)
        {
            this.romTreePlantillas.Nodes.Clear();
            this.Actualizar();
        }

        /// <summary>
        /// previsualizar plantillaContenido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butVer_Click(object sender, EventArgs e)
        {
            this.Preview();
        }

        #endregion

        #region " Metodos "

        /// <summary>
        /// Actualizar lista de plantillas
        /// </summary>
        private void Actualizar()
        {
            List<PlantillaGrupo> Todosgrupos = new List<PlantillaGrupo>();
            List<Plantilla> TodasPlantillas = new List<Plantilla>();
            List<PlantillaContenido> TodosPlantillasContenidos = new List<PlantillaContenido>();

            using (var db = new sosContext())
            {
                Todosgrupos = (from g in db.GruposPlantilla select g).ToList();
                TodasPlantillas = (from p in db.Plantillas.Include("PlantillaContenidos").Include("PlantillaUOCMails") select p).ToList();
                //List<PlantillaContenido> plantillasContenidos = from pc in db.PlantillaContenidos where pc.Plantillas.Nombre == plantilla.Nombre select pc;
                TodosPlantillasContenidos = (from pc in db.PlantillaContenidos.Include("Parametros").Include("Plantillas") select pc).ToList();

                foreach (var grupo in Todosgrupos)
                {
                    this.romTreePlantillas.Nodes.Add(grupo.Nombre);

                    var plantillasGrupo = (from p in TodasPlantillas.Where(p => p.Grupo == grupo.Nombre) select p).ToList();
                    foreach (var plantilla in plantillasGrupo)
                    {

                        this.romTreePlantillas.Nodes[romTreePlantillas.Nodes.Count - 1].Nodes.Add("P" + plantilla.Id, plantilla.Nombre);

                        var plantillaContenidosPlantillas = (from pc in db.PlantillaContenidos where pc.Plantillas.Id == plantilla.Id select pc).ToList();

                        foreach (var plantillaContenido in plantillaContenidosPlantillas)
                        {
                            this.romTreePlantillas.Nodes[romTreePlantillas.Nodes.Count - 1].Nodes["P" + plantilla.Id.ToString()].Nodes.Add("PC" + plantillaContenido.Id, plantillaContenido.Nombre);
                        }
                    }
                }
            }
        }

        PlantillaContenido _plantillaContenido;
        /// <summary>
        /// Previsualizar plantilla
        /// </summary>
        private void Preview()
        {
            try
            {
                if (_plantillaContenido != null)
                {
                    FormPlantillaContenidoPreview PlantillaContenidoPreview = new FormPlantillaContenidoPreview(_plantillaContenido);
                    PlantillaContenidoPreview.MdiParent = this.MdiParent;
                    PlantillaContenidoPreview.Show();
                }

            }
            catch
            {
            }
        }

        #endregion

        #region " Eventos "

        public delegate void del(PlantillaContenido pc);
        public event del delEvent;
        /// <summary>
        /// Capturar plantillaContenido 
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void romTreePlantillas_AfterSelect(object sender, TreeViewEventArgs e)
        {
            using (var db = new sosContext())
            {
                try
                {
                    TreeNode pcNode = this.romTreePlantillas.SelectedNode;
                    _plantillaContenido = (from pc in db.PlantillaContenidos
                                           where pc.Nombre == pcNode.Text &&
                                               pc.Plantillas.Nombre == pcNode.Parent.Text
                                           select pc).FirstOrDefault();
                    delEvent(_plantillaContenido);
                }
                catch { _plantillaContenido = null; }
            }
        }

        /// <summary>
        /// Preview plantillaConido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void romTreePlantillas_DoubleClick(object sender, EventArgs e)
        {
            Preview();
        }

        #endregion

        #region " ContextMenu "

        /// <summary>
        /// Expandir todo
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void expandirTodoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.romTreePlantillas.ExpandAll();
        }

        /// <summary>
        /// Expandier nodo seleccionado
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void expandirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.romTreePlantillas.SelectedNode.Expand();
            }
            catch { }
        }

        /// <summary>
        /// Colapsar todo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void colapsarTodoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.romTreePlantillas.CollapseAll();
        }

        /// <summary>
        /// colapsar nodo seleccionado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void colapsarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.romTreePlantillas.SelectedNode.Collapse();
            }
            catch { }
        }

        /// <summary>
        /// Previsualizar plantilla contenido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void verToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Preview();
        }

        #endregion


    }
}
